import axios, {AxiosResponse, AxiosError} from 'axios';
import {message} from "antd";

// 定义 `Request` 类型
type Request = AxiosResponse & {
    data: {
        code?: string;
        [key: string]: any; // 可扩展属性
    };
};

// 创建一个 axios 实例
const request = axios.create({
    baseURL: 'http://127.0.0.1:5000', // API 基础 URL
    timeout: 10000,
});

// 请求拦截器
request.interceptors.request.use(
    (config) => {
        // 设置请求头
        config.headers['Content-Type'] = 'application/json;charset=utf-8';

        const token = localStorage.getItem('token');
        if (token) {
            config.headers['token'] = token;
        }

        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    (response: Request) => {
        let res = response.data;

        // 如果是文件响应
        if (response.config.responseType === 'blob') {
            return res;
        }

        // 如果返回的数据是字符串
        if (typeof res === 'string') {
            try {
                res = res ? JSON.parse(res) : res;
            } catch (e) {
                console.error('JSON parsing error:', e);
            }
        }

        // 处理错误代码
        if (res.code === '401') {
            message.error('用户名或密码错误！');
        }

        return res;
    },
    (error: AxiosError) => {
        console.error('Error:', error);
        return Promise.reject(error);
    }
);

export default request;
